const { log } = require('node:console')
const fs = require('node:fs')
const fsPromise = require('node:fs/promises')
/**
 * 1. 读取文件 readFile
 * 2. 可读流 createReadStream
 * 3. 创建文件夹 recursive 递归
 * 4. 删除 rm
 * 5. 重命名 renameSync
 * 6. 监听文件变化 watch
 * 7. 源码 libuv
 * 8. 注意事项 事件循环 setImmediate
 */

// 1. 读取文件 异步 同步 promise
// 异步
// fs.readFile('./index.txt', {
//     encoding: 'utf-8',
//     flag: 'r'
// }, (err, data) => {
//     if (err) return console.log(err)
//     console.log(data)
// })

// 同步 会阻塞代码  不传第二个配置项参数默认返回二进制 buffer
// const result = fs.readFileSync('./index.txt')
// console.log('result', result.toString())
// const result = fs.readFileSync('./index.txt', {
//     encoding: 'utf-8'
// })
// console.log('result', result)

// promise
// fsPromise.readFile('./index.txt', { encoding: 'utf-8' }).then(res => {
//     console.log('res', res)
// }).catch(e => {
//     console.log(e)
// })

// 2. 可读流 createReadStream
// 使用场景  处理大文件 将文件分段返回
// const readStream = fs.createReadStream('./index.txt')
// readStream.on('data', (chunk) => {
//     console.log('11111', chunk.toString())
// })
// readStream.on('end', () => {
//     console.log('读取完成')
// })


// 3. 创建文件夹 recursive 递归
// fs.mkdirSync('./xwww/csacs/csavf', { recursive: true })

// 4. 删除 rm
// fs.rmSync('./xwww', { recursive: true })

// 5. 重命名 renameSync
// fs.renameSync('./index.txt', './出师表.txt')

// 6. 监听文件变化 watch
// fs.watch('./出师表.txt', (event, filename) => {
//     console.log('event,filename', event, filename)  // change 出师表.txt
// })

// 8. 注意事项 事件循环 setImmediate
// // 异步事件 会添加到事件队列
// // fs IO 操作都是由 libuv 完成的  完成任务之后 才会推入 V8 事件队列
// fs.readFile('./index.txt', {
//     encoding: 'utf-8',
//     flag: 'r'
// }, (err, data) => {
//     if (err) return console.log(err)
//     console.log('./index.txt')
// })
// // 他会等待本轮事件循环结束 触发
// // 计时器等 是由 V8 完成的
// setImmediate(() => {
//     console.log('setImmediate')
// })